#pragma once

#ifndef LHJ_CORE_COMMON_CONFIGURE_H__
#define LHJ_CORE_COMMON_CONFIGURE_H__

#include <string>
#include <map>
#include <configvalue.h>

namespace cores
{
    namespace common
    {
        namespace configures
        {
            using namespace std;
            using namespace datas::configures;

            class Configure
            {
            public:
                virtual ~Configure();
                static void LoadConfigInfo();

                static string toString(const string& name);
                static int toInt(const string& name);
                static double toDouble(const string& name);
                static bool toBool(const string& name);

                static void setValue(const string& name, const string& value);
                static void setValue(const string& name, const int& value);
                static void setValue(const string& name, const double& value);
                static void setValue(const string& name, const bool& value);
            protected:
                Configure();               
                virtual void loadConfigInfo() = 0;

                void addConfigItem(const string &name, const string& value);
                void addConfigItem(const string &name, const int& value);
                void addConfigItem(const string &name, const double& value);
                void addConfigItem(const string &name, const bool& value);

            private:
                map<string, Value*> _configItems;                

            private:
                static Configure *globalInstance;
            };
        }
    }
}

#endif